From e4cc50f7a43b8e9c86e99568fc9a06e360e1e9d8 Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Wed, 13 Jul 2005 13:12:00 -0700 Subject: [PATCH] Fix PAL_PTCE_INFO and cpuid (pfmon now works) --- xen/arch/ia64/dom_fw.c | 27 ++++++++++++++++++++++++--- xen/arch/ia64/vcpu.c | 12 ++++++++---- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/xen/arch/ia64/dom_fw.c b/xen/arch/ia64/dom_fw.c index 751f39c64f..160d5be4cc 100644 --- a/xen/arch/ia64/dom_fw.c +++ b/xen/arch/ia64/dom_fw.c @@ -313,7 +313,14 @@ xen_pal_emulator(unsigned long index, unsigned long in1, status = ia64_pal_freq_ratios(&r9,&r10,&r11); break; case PAL_PTCE_INFO: - status = ia64_get_ptce(&r9); + { + ia64_ptce_info_t ptce; + status = ia64_get_ptce(&ptce); + if (status != 0) break; + r9 = ptce.base; + r10 = (ptce.count[0]<<32)|(ptce.count[1]&0xffffffffL); + r11 = (ptce.stride[0]<<32)|(ptce.stride[1]&0xffffffffL); + } break; case PAL_VERSION: status = ia64_pal_version(&r9,&r10); @@ -340,18 +347,30 @@ xen_pal_emulator(unsigned long index, unsigned long in1, status = ia64_pal_register_info(in1,&r9,&r10); break; case PAL_CACHE_FLUSH: - return pal_emulator_static(index); /* FIXME */ + /* FIXME */ + printk("PAL_CACHE_FLUSH NOT IMPLEMENTED!\n"); + BUG(); break; case PAL_PERF_MON_INFO: { unsigned long pm_buffer[16]; + int i; status = ia64_pal_perf_mon_info(pm_buffer,&r9); - if (status != 0) break; + if (status != 0) { + while(1) + printk("PAL_PERF_MON_INFO fails ret=%d\n",status); + break; + } if (copy_to_user((void __user *)in1,pm_buffer,128)) { + while(1) printk("xen_pal_emulator: PAL_PERF_MON_INFO " "can't copy to user!!!!\n"); status = -1; + break; } + printk("PAL_PERF_MON_INFO succeeds! r9=%lx\n",r9); + for (i=0; i<16;i++) + printk("pm_buffer[i]=%lx\n",pm_buffer[i]); } break; case PAL_CACHE_INFO: @@ -364,8 +383,10 @@ xen_pal_emulator(unsigned long index, unsigned long in1, } break; case PAL_VM_TR_READ: /* FIXME: vcpu_get_tr?? */ + printk("PAL_VM_TR_READ NOT IMPLEMENTED, IGNORED!\n"); break; case PAL_HALT_INFO: /* inappropriate info for guest? */ + printk("PAL_HALT_INFO NOT IMPLEMENTED, IGNORED!\n"); break; default: printk("xen_pal_emulator: UNIMPLEMENTED PAL CALL %d!!!!\n", diff --git a/xen/arch/ia64/vcpu.c b/xen/arch/ia64/vcpu.c index 985422b112..c850c5fd65 100644 --- a/xen/arch/ia64/vcpu.c +++ b/xen/arch/ia64/vcpu.c @@ -1499,20 +1499,24 @@ IA64FAULT vcpu_get_cpuid(VCPU *vcpu, UINT64 reg, UINT64 *pval) // if reg > 3 switch(reg) { case 0: - case 1: memcpy(pval,"Xen/ia64",8); break; + case 1: + *pval = 0; + break; case 2: *pval = 0; break; case 3: - *pval = 0; //FIXME: See vol1, 3.1.11 + *pval = ia64_get_cpuid(3); break; case 4: - *pval = 1; //FIXME: See vol1, 3.1.11 + *pval = ia64_get_cpuid(4); break; default: - *pval = 0; //FIXME: See vol1, 3.1.11 + if (reg > (ia64_get_cpuid(3) & 0xff)) + return IA64_RSVDREG_FAULT; + *pval = ia64_get_cpuid(reg); break; } return (IA64_NO_FAULT); -- 2.30.2